|
|
@@ -17,7 +17,8 @@ from utils.group_photo_utils import get_current_photos
|
17
|
17
|
from utils.redis.rgroup import get_group_info, get_group_users_info, get_group_users_kv_info, set_group_users_info
|
18
|
18
|
from utils.redis.rkeys import (GROUP_LAST_PHOTO_PK, GROUP_USERS_DELETED_SET, GROUP_USERS_PASSED_SET,
|
19
|
19
|
GROUP_USERS_QUIT_SET, GROUP_USERS_REFUSED_SET, TOUR_GUIDE_GROUP_CUR_GATHER_INFO,
|
20
|
|
- TOUR_GUIDE_GROUP_CUR_SESSION, TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_USER_GEO_LIST)
|
|
20
|
+ TOUR_GUIDE_GROUP_CUR_SESSION, TOUR_GUIDE_GROUP_GEO_INFO, TOUR_GUIDE_GROUP_GEO_SUBMIT_DT,
|
|
21
|
+ TOUR_GUIDE_GROUP_USER_GEO_LIST)
|
21
|
22
|
from utils.redis.rtourguide import get_tour_guide_own_group
|
22
|
23
|
from utils.redis.rtouruser import set_tour_user_belong_group
|
23
|
24
|
|
|
|
@@ -217,6 +218,18 @@ def tgu_group_user_update_api(request):
|
217
|
218
|
})
|
218
|
219
|
|
219
|
220
|
|
|
221
|
+def get_geo_submit_flag(geo_at, gather_at):
|
|
222
|
+ """ 是否上传过位置字段(即是否失联) """
|
|
223
|
+ if geo_at and gather_at:
|
|
224
|
+ current_dt = tc.utc_datetime()
|
|
225
|
+ delta_seconds = tc.total_seconds(gather_at - current_dt)
|
|
226
|
+ # 距离集合时间超过30分钟是5分钟,15分钟到30分钟是3分钟,15分钟以内是1分钟
|
|
227
|
+ for delta, gdt in [(1800, 300), (900, 180), (0, 60)]:
|
|
228
|
+ if delta_seconds > delta:
|
|
229
|
+ return tc.total_seconds(current_dt - geo_at) <= gdt
|
|
230
|
+ return False
|
|
231
|
+
|
|
232
|
+
|
220
|
233
|
@logit
|
221
|
234
|
def tgu_group_user_locations_api(request):
|
222
|
235
|
""" 旅行团所有成员位置信息 """
|
|
|
@@ -230,6 +243,9 @@ def tgu_group_user_locations_api(request):
|
230
|
243
|
# 获取集合经纬度
|
231
|
244
|
gather_info = json.loads(r.get(TOUR_GUIDE_GROUP_CUR_GATHER_INFO % group_id) or '{}')
|
232
|
245
|
|
|
246
|
+ # GEO submit dts
|
|
247
|
+ geo_dts = r.hgetall(TOUR_GUIDE_GROUP_GEO_SUBMIT_DT % group_id)
|
|
248
|
+
|
233
|
249
|
# [['x', 0.33, (2.68220901489e-06, 1.26736058093e-06)], []]
|
234
|
250
|
locations = r.georadius(TOUR_GUIDE_GROUP_GEO_INFO % group_id, gather_info.get('gather_lon', 0), gather_info.get('gather_lat', 0), '+inf', unit='m', withdist=True, withcoord=True, sort='ASC')
|
235
|
251
|
# [{'lon': 2.68220901489e-06, 'lat': 26736058093e-06, 'dist': 0.33, etc...}, {}]
|
|
|
@@ -238,7 +254,8 @@ def tgu_group_user_locations_api(request):
|
238
|
254
|
locations = [dict(group_users_kv_info[loc[0]], **{
|
239
|
255
|
'lon': loc[2][0],
|
240
|
256
|
'lat': loc[2][1],
|
241
|
|
- 'dist': loc[1]
|
|
257
|
+ 'dist': loc[1],
|
|
258
|
+ 'geo_submited': get_geo_submit_flag(tc.utc_string_to_utc_datetime(geo_dts.get(loc[0], '')), gather_info.get('gather_at', '')),
|
242
|
259
|
}) for loc in locations]
|
243
|
260
|
|
244
|
261
|
return response(200, 'Get Tour Guide Group All User Location Success', u'获取旅行团成员地理位置信息成功', {
|